class Person {
  constructor(name, age) {
    this.name = name;
    this.age = age;
  }

  running() {
    console.log(this.name + " running");
  }

  personMethod() {
    console.log("逻辑1");
    console.log("逻辑2");
    console.log("逻辑3");
  }

  static PersonStaticMethod() {
    console.log("父类的静态方法");
  }
}

// Student称之为子类（派生类）
class Student extends Person {
  // JS引擎在解析子类的时候就有要求，如果我们有实现继承
  // 那么子类的构造方法中，在使用this之前，必须调用super
  constructor(name, age, num) {
    super(name, age);
    this.num = num;
  }

  // 类对父类方法的重写
  running() {
    console.log("student " + this.name + " running");
  }

  // 重写personMethod方法
  // personMethod() {
  //   super.personMethod();

  //   console.log("逻辑4");
  //   console.log("逻辑5");
  //   console.log("逻辑6");
  // }

  // 重写静态方法
  static PersonStaticMethod() {
    super.PersonStaticMethod();
    console.log("StudentStaticMethod");
  }
}

var stu = new Student("frank", 18, 100);
console.log(stu);
stu.running();
stu.personMethod();
Student.PersonStaticMethod();
